package recursion;

/**
 * @program: play-structure
 * 移除链表元素,删除链表中等于给定值 val 的所有节点，使用递归
 * @author: baichen
 **/
public class RemoveLinkedListElement4 {
    public ListNode removeElements(ListNode head, int val) {
        if(head == null)
            return head;

        ListNode res = removeElements(head.next, val);	//res 中存储将头节点后面跟着的链表中所有值为 val 的值删除后剩下的链表
        if(head.val == val)	//head这个节点也满足要被删除的条件
            return res;
        else{
            head.next = res;//不删除 head,head 接head后面的链表删除 val 后的链表
            return head;
        }
    }

    public static void main(String[] args) {
        int[] nums = {1, 2, 6, 3, 4, 5, 6};	//声明数组
        ListNode head = new ListNode(nums);	//构造函数中传入数组nums
        System.out.println(head);	//打印以 head 作为头结点的整个链表对应的字符串

        ListNode res = (new RemoveLinkedListElement4()).removeElements(head, 6);//将 head 和待删除节点6作为参数传入
        System.out.println(res);
    }
}
